home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / raytrace / rayshade / graphtal.lzh / Graphtal.Amiga / Production.h < prev    next >
C/C++ Source or Header  |  1992-11-20  |  2KB  |  76 lines

  1. /*
  2.  * Production.h - class definition for L-System productions.
  3.  *
  4.  * Copyright (C) 1992, Christoph Streit (streit@iam.unibe.ch)
  5.  *                     University of Berne, Switzerland
  6.  * All rights reserved.
  7.  *
  8.  * This software may be freely copied, modified, and redistributed
  9.  * provided that this copyright notice is preserved on all copies.
  10.  *
  11.  * You may not distribute this software, in whole or in part, as part of
  12.  * any commercial product without the express consent of the authors.
  13.  *
  14.  * There is no warranty or other guarantee of fitness of this software
  15.  * for any purpose.  It is provided solely "as is".
  16.  *
  17.  */
  18.  
  19. #ifndef Production_H
  20. # define Production_H
  21.  
  22. #include "mathutilities.h"
  23. #include "Predecessor.h"
  24. #include "Successor.h"
  25.  
  26. //___________________________________________________________ Production
  27. //
  28. // A production of an L-System has tree parts: the predecessor, the
  29. //  condition and a successor list. 
  30.  
  31. class Production
  32. {
  33. public:
  34.   Production(Predecessor*, Expression*, SuccessorList*);
  35.   ~Production();
  36.  
  37.   int hashValue();
  38.   int argCount() const;
  39.   const Name& name() const;
  40.  
  41.   int cumulateProbability();
  42.   int evalCondition();
  43.   ModuleList* cloneSuccessor();
  44.  
  45.   friend ostream& operator<<(ostream&, Production&);
  46.  
  47. private:
  48.   Name _name;     // copy of the predecessor name
  49.   int arg_count;
  50.   int stochastic; // more than one successor => Yes: choose by random
  51.  
  52.   Predecessor* predecessor;
  53.   Expression* condition;
  54.   SuccessorList* successors;
  55. };
  56.  
  57. typedef Production* ProductionPtr;
  58. declareList(ProductionList, ProductionPtr);
  59.  
  60. inline int Production::argCount() const { 
  61.   return arg_count; 
  62. }
  63.  
  64. inline const Name& Production::name() const {
  65.   return _name; 
  66. }
  67.  
  68. inline int Production::evalCondition() {
  69.   if (condition)
  70.     return (real(condition->evaluate()) ? 1 : 0);
  71.   else
  72.     return 1;
  73. }
  74.  
  75. #endif // Production_H
  76.